home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga Format CD 23
/
Amiga Format AFCD23 (Feb 1998, Issue 107).iso
/
+look_here_1st!+
/
reader_requests
/
voiceshell
/
source
/
vsconv.s
< prev
Wrap
Text File
|
1997-12-05
|
18KB
|
1,005 lines
*************************************************
* *
* (C) Copyright 1993-95 *
* *
* Tomi Blinnikka *
* *
* Don't try to understand the code *
* *
* Version 1.00 15.08.1993 *
* -03.03.1993 *
* BUGS: *
* *
* Not finished. *
* *
* Version 1.01 03.01.1995 *
* *
* Should now support all file types. *
* *
*************************************************
INCLUDE "JMPLibs.i"
INCLUDE "libraries/dos.i"
INCLUDE "XREF:2.0.xref"
INCLUDE "XREF:exec.xref"
INCLUDE "XREF:dos.xref"
INCLUDE "libraries/voice.i"
PROGVERSION: macro
dc.b "1.01 (03.01.95)"
endm
DefAccVal: EQU 3000 ;VoiceShell default
;VSFileVersion 'VS02', oldest supported type
GADLENG1VS02: EQU 16
GADLENG2VS02: EQU 64
GADLENGTHVS02: EQU (GADLENG1VS02+GADLENG2VS02)
;VSFileVersion 'VS03', has longer command strings than 02
VocabSIZE: EQU 60
GADLENG1: EQU 16
GADLENG2: EQU 256
GADLENGTH: EQU (GADLENG1+GADLENG2)
VSMB_Size: EQU VocabSIZE*304
;VSFileVersion 'VS04', has error commands (9*GADLENG2), Wakeup and
;confirmation
;VSFileVersion 'VS05', prefs and data file joined, PrefsWake length
;changed from byte to word
VS02Length: EQU 23040
VS03Length: EQU 34560
VS04Length: EQU 36864
VS05Length: EQU 36902
VSHEADER_SIZE: EQU 4
;VCLI version 7.0
VCLIVocabSIZE: EQU 48
VCLIMB_Size: EQU VCLIVocabSIZE*304
NullBufSize1: EQU 65536
TRUE: EQU 1
FALSE: EQU 0
section VSConv,CODE
openlib Dos,NoDos
lea.l CLTemplate1,a0
move.l a0,d1
lea.l CLArray1,a0
move.l a0,d2
clr.l d3
lib Dos,ReadArgs
move.l d0,RDArgs1
beq NoRDArgs
lib Dos,Output
move.l d0,_stdout
lib Dos,Input
move.l d0,_stdin
lea.l FromFileText1,a0
bsr Printer
move.l SourceFile1,a0
bsr Printer
lea.l CRLFText1,a0
bsr Printer
lea.l FromFileText2,a0
bsr Printer
move.l SourceFile2,a0
bsr Printer
lea.l CRLFText1,a0
bsr Printer
lea.l DestText1,a0
bsr Printer
move.l DestFile,a0
bsr Printer
lea.l CRLFText1,a0
bsr Printer
move.l SourceFile1,d1
move.l #MODE_OLDFILE,d2
lib Dos,Open
move.l d0,Source1
beq NoRDArgs
move.l SourceFile2,d1
move.l #MODE_OLDFILE,d2
lib Dos,Open
move.l d0,Source2
move.l DestFile,d1
move.l #MODE_OLDFILE,d2
lib Dos,Open
move.l d0,Destination
beq OpenDest2
OpenDest1: lea.l FExistsText1,a0
bsr Printer
bsr GetYesNo
tst.l d0
beq OpenDest1
cmp.l #1,d0 ;Yes, replace
beq OpenDest1.1
cmp.l #2,d0
beq ShutDown
move.l #RETURN_FAIL,RetCode
bra ShutDown ;Error
OpenDest1.1: move.l Destination,d1 ;Close and reopen as new
lib Dos,Close
clr.l Destination
OpenDest2: move.l DestFile,d1
move.l #MODE_NEWFILE,d2
lib Dos,Open
move.l d0,Destination
beq NoRDArgs
lea.l CRLFText1,a0
bsr Printer
;Versions 02 - 04 must be checked by length since the data file didn't have
;a header at all... :(
move.l Source1,d1
bsr GetFileLength
tst.l d0
beq NoRDArgs
cmp.l #VS02Length,d0
beq DoVS02
cmp.l #VS03Length,d0
beq DoVS03
cmp.l #VS04Length,d0
beq DoVS04
;These can be checked directly from the header
move.l Source1,d1
bsr GetHeader
tst.l d0
beq NoRDArgs
lea.l VSVersion05,a0
lea.l CopyBuffer1,a1
bsr CmpStrings
tst.l d0
bne DoVS05
lea.l VCLI70ID,a0
lea.l CopyBuffer1,a1
bsr CmpStrings
tst.l d0
bne DoVCLI70
lea.l UnknownText1,a0
bsr Printer
lea.l CopyBuffer1,a0
bsr Printer
lea.l CRLFText1,a0
bsr Printer
bra ShutDown
DoVS02: lea.l ConvText1,a0
bsr Printer
lea.l ConvText3,a0
bsr Printer
;Test for optional prefs file and get prefs if possible
move.l Source2,d1
beq DoVS02.2
lea.l CopyBuffer1,a0
move.l a0,d2
move.l #38,d3
lib Dos,Read
cmp.l d3,d0
bne NoRDArgs
lea.l VSVersion02,a0
lea.l CopyBuffer1,a1
bsr CmpStrings
tst.l d0
bne DoVS02.1
lea.l IncVerText1,a0
bsr Printer
move.l #RETURN_WARN,RetCode
bra DoVS02.2
DoVS02.1: lea.l CopyBuffer1,a0
add.l #4,a0 ;Skip header
lea.l DefPrefs,a1
add.l #4,a1 ;Skip header
move.l #14,d0
lib Exec,CopyMem ;Copy prefs, part I
lea.l CopyBuffer1,a0
lea.l DefPrefs,a1
move.b 18(a0),19(a1) ;Move wake correctly
move.l 34(a0),34(a1) ;Move Alt(X/Y)Pos
DoVS02.2: bsr WriteDefPrefs
tst.l d0
beq NoRDArgs
move.l #VSMB_Size,d0
bsr CopyMapBuffer
tst.l d0
beq NoRDArgs
;Copy commands and patch length
move.l #VocabSIZE,d5
DoVS02.3: bsr CopyGL02Bytes
tst.l d0
beq NoRDArgs
move.l #(GADLENG2-GADLENG2VS02),d3 ;192 bytes
bsr WriteNulls
tst.l d0
beq NoRDArgs
sub.l #1,d5
bne DoVS02.3 ;Do until end
;Error commands
move.l #(9*GADLENG2),d3 ;2304 bytes
bsr WriteNulls
tst.l d0
beq NoRDArgs
bra ShutDown
DoVS03: lea.l ConvText1,a0
bsr Printer
lea.l ConvText4,a0
bsr Printer
;Test for optional prefs file and get prefs if possible
move.l Source2,d1
beq DoVS03.2
lea.l CopyBuffer1,a0
move.l a0,d2
move.l #38,d3
lib Dos,Read
cmp.l d3,d0
bne NoRDArgs
lea.l VSVersion03,a0
lea.l CopyBuffer1,a1
bsr CmpStrings
tst.l d0
bne DoVS03.1
lea.l IncVerText1,a0
bsr Printer
move.l #RETURN_WARN,RetCode
bra DoVS03.2
DoVS03.1: lea.l CopyBuffer1,a0
add.l #4,a0 ;Skip header
lea.l DefPrefs,a1
add.l #4,a1 ;Skip header
move.l #14,d0
lib Exec,CopyMem ;Copy prefs, part I
lea.l CopyBuffer1,a0
lea.l DefPrefs,a1
move.b 18(a0),19(a1) ;Move wake correctly
move.l 34(a0),34(a1) ;Move Alt(X/Y)Pos
DoVS03.2: bsr WriteDefPrefs
tst.l d0
beq NoRDArgs
;Do MapBuffer & CommandList
move.l Source1,d1
move.l #(VSMB_Size+VocabSIZE*GADLENGTH),d3
bsr CopyBytes
tst.l d0
beq NoRDArgs
;Do ErrCmdList
move.l #(9*GADLENG2),d3 ;2304 bytes
bsr WriteNulls
tst.l d0
beq NoRDArgs
bra ShutDown
DoVS04: lea.l ConvText1,a0
bsr Printer
lea.l ConvText5,a0
bsr Printer
;Test for optional prefs file and get prefs if possible
move.l Source2,d1
beq DoVS04.2
lea.l CopyBuffer1,a0
move.l a0,d2
move.l #38,d3
lib Dos,Read
cmp.l d3,d0
bne NoRDArgs
lea.l VSVersion04,a0
lea.l CopyBuffer1,a1
bsr CmpStrings
tst.l d0
bne DoVS04.1
lea.l IncVerText1,a0
bsr Printer
move.l #RETURN_WARN,RetCode
bra DoVS04.2
DoVS04.1: lea.l CopyBuffer1,a0
add.l #4,a0 ;Skip header
lea.l DefPrefs,a1
add.l #4,a1 ;Skip header
move.l #14,d0
lib Exec,CopyMem ;Copy prefs, part I
lea.l CopyBuffer1,a0
lea.l DefPrefs,a1
move.b 18(a0),19(a1) ;Move wake correctly
move.l 34(a0),34(a1) ;Move Alt(X/Y)Pos
DoVS04.2: bsr WriteDefPrefs
tst.l d0
beq NoRDArgs
;Do MapBuffer, CommandList & ErrorCommands
move.l Source1,d1
move.l #(VSMB_Size+VocabSIZE*GADLENGTH+9*GADLENG2),d3
bsr CopyBytes
tst.l d0
beq NoRDArgs
bra ShutDown
DoVS05: lea.l NewestText1,a0
bsr Printer
bra ShutDown
DoVCLI70: lea.l ConvText2,a0
bsr Printer
lea.l ConvText9,a0
bsr Printer
;Seek 12+VCLIMB_Size+16*48+128*48 bytes from the start, to
;beginning of VCLI preferences in source (VCLI file)
move.l Source1,d1
move.l #12+VCLIMB_Size+16*48+128*48,d2
move.l #OFFSET_BEGINNING,d3
lib Dos,Seek
cmp.l #-1,d0
beq NoRDArgs
;Read prefs 4 bytes
move.l Source1,d1
lea.l CopyBuffer1,a0
move.l a0,d2
move.l #4,d3
lib Dos,Read
cmp.l d3,d0
bne NoRDArgs
lea.l CopyBuffer1,a0
lea.l DefPrefs,a1
move.b (a0)+,d0
btst.b #0,d0 ;Timer bit
bne DoVCLI70.1
move.b #TIMER_B,7(a1)
bra DoVCLI70.2
DoVCLI70.1: move.b #TIMER_A,7(a1)
DoVCLI70.2: btst.b #1,d0 ;Confirm
bne DoVCLI70.3
move.b #TRUE,11(a1) ;Default is on
bra DoVCLI70.4
DoVCLI70.3: move.b #FALSE,11(a1)
DoVCLI70.4: move.b (a0)+,5(a1) ;SampType
move.b (a0),8(a1) ;Gain
;Write prefs
bsr WriteDefPrefs
;Seek 12 bytes from the start, to beginning of MapBuffer,
;in source (VCLI file)
move.l Source1,d1
move.l #12,d2
move.l #OFFSET_BEGINNING,d3
lib Dos,Seek
cmp.l #-1,d0
beq NoRDArgs
;Copy VCLI MapBuffer to Destination (VoiceShell)
move.l #VCLIMB_Size,d0
bsr CopyMapBuffer
tst.l d0
beq NoRDArgs
;Correct VCLI to VoiceShell vocabulary size difference
;
;Write (VocabSIZE*304) - (VCLIVocabSIZE*304) amount of NULL to Destination
move.l #VSMB_Size-VCLIMB_Size,d3
bsr WriteNulls
tst.l d0
beq NoRDArgs
;Copy descriptions from Source (VCLI) to Destination (VoiceShell) with
;steps of GADLENG1. Read in 16 bytes chunks, written in GADLENG1 chunks,
;VCLIVocabSIZE times. Skip GADLENG2 in between.
move.l Source1,d1
lea.l CopyBuffer1,a0
move.l a0,d2
move.l #VCLIVocabSIZE*16,d3
lib Dos,Read
cmp.l d3,d0
bne NoRDArgs
clr.l d5
VCLI70.5: move.l d5,d0
mulu.w #16,d0 ;Get offset
lea.l CopyBuffer1,a0
move.l a0,d2
add.l d0,d2
move.l Destination,d1
move.l #16,d3
lib Dos,Write
cmp.l d3,d0
bne NoRDArgs
move.l #GADLENG2,d3 ;skip command for now
bsr WriteNulls
tst.l d0
beq NoRDArgs
add.l #1,d5
cmp.l #VCLIVocabSIZE,d5
bne VCLI70.5
;Add missing entries
move.l #GADLENGTH*(VocabSIZE-VCLIVocabSIZE),d3 ;skip command for now
bsr WriteNulls
tst.l d0
beq NoRDArgs
;Seek to first CLI Command string in Destination (VoiceShell)
;
move.l Destination,d1
move.l #38+VSMB_Size+GADLENG1,d2
move.l #OFFSET_BEGINNING,d3
lib Dos,Seek
cmp.l #-1,d0
beq NoRDArgs
;Copy strings from Source (VCLI) to Destination (VoiceShell) with steps of
;GADLENG2. Read in 128 bytes chunks, written in GADLENG2 chunks,
;VCLIVocabSIZE times. Skip GADLENG1 in between.
move.l Source1,d1
lea.l CopyBuffer1,a0
move.l a0,d2
move.l #VCLIVocabSIZE*128,d3
lib Dos,Read
cmp.l d3,d0
bne NoRDArgs
clr.l d5
VCLI70.6: move.l d5,d0
mulu.w #128,d0 ;Get offset
lea.l CopyBuffer1,a0
move.l a0,d2
add.l d0,d2
move.l Destination,d1
move.l #128,d3
lib Dos,Write
cmp.l d3,d0
bne NoRDArgs
move.l Destination,d1
move.l #(GADLENG2-128)+GADLENG1,d2 ;skip description and leftovers
move.l #OFFSET_CURRENT,d3
lib Dos,Seek
cmp.l #-1,d0
beq NoRDArgs
add.l #1,d5
cmp.l #VCLIVocabSIZE,d5
bne VCLI70.6
;Error commands
move.l Destination,d1
bsr SeekEnd
cmp.l #-1,d0
beq NoRDArgs
move.l #(9*GADLENG2),d3 ;2304 bytes
bsr WriteNulls
tst.l d0
beq NoRDArgs
bra ShutDown
GetYesNo: move.l _stdin,d1
move.l #TRUE,d2
lib Dos,SetMode
move.l _stdin,d1
lib Dos,Flush
move.l _stdin,d1
lib Dos,FGetC
cmp.l #-1,d0
bne GetYesNo2
lea.l ErrorText1,a0
bsr Printer
bra GetYesNo_OUT
GetYesNo2: cmp.l #'y',d0
beq GetYesNo3
cmp.l #'Y',d0
beq GetYesNo3
cmp.l #'n',d0
beq GetYesNo4
cmp.l #'N',d0
beq GetYesNo4
cmp.l #13,d0
beq GetYesNo4 ;Return
cmp.l #10,d0
beq GetYesNo4 ;Return
clr.l d0
bra GetYesNo_OUT
GetYesNo3: lea.l YesText1,a0
bsr Printer
move.l #1,d0
bra GetYesNo_OUT
GetYesNo4: lea.l NoText1,a0
bsr Printer
move.l #2,d0
; bra GetYesNo_OUT ;Careful!
GetYesNo_OUT: push d0
move.l _stdin,d1
move.l #FALSE,d2
lib Dos,SetMode
pull d0
rts
;GetFileLength gets the length of a file and returns to the start of file
;
;Input d1 = File
;
;Result d0 = Length
;
GetFileLength: move.l d1,d3
bsr SeekStart
cmp.l #-1,d0
beq GetFLength_ERR
move.l d3,d1
bsr SeekEnd
cmp.l #-1,d0
beq GetFLength_ERR
push d0
move.l d3,d1
bsr SeekStart
cmp.l #-1,d0
beq GetFLength_ERR2
pull d0
rts
GetFLength_ERR2: pull d0
GetFLength_ERR: clr.l d0
rts
;Seek to end of file
;
;Input d1 = File
;
;Result d0 = Length
;
SeekEnd: push d2-d6
move.l d1,d6
clr.l d2
move.l #OFFSET_END,d3
lib Dos,Seek
cmp.l #-1,d0
beq SeekEnd_ERR
move.l d6,d1
lib Dos,Seek
SeekEnd_ERR: pull d2-d6
rts
;Seek to start of file
;
;Input d1 = File
;
;Result d0 = Length
;
SeekStart: push d2-d3
move.l #0,d2
move.l #OFFSET_BEGINNING,d3
lib Dos,Seek
pull d2-d3
rts
;GetHeader reads 12 bytes into CopyBuffer1 and seeks to start of file
;
;Input d1 = File
GetHeader: move.l d1,d4
bsr SeekStart
cmp.l #-1,d0
beq GetHeader_ERR1
move.l d4,d1
lea.l CopyBuffer1,a0
move.l a0,d2
move.l #12,d3
lib Dos,Read
cmp.l #12,d0
bne GetHeader_ERR1
move.l d4,d1
bsr SeekStart
cmp.l #-1,d0
beq GetHeader_ERR1
move.l #-1,d0
rts
GetHeader_ERR1: clr.l d0
rts
;WriteDefPrefs writes DefPrefsSize bytes from start of file to destination
;
;DefPrefs should be set accordingly (or left alone for defaults)
WriteDefPrefs: move.l Destination,d1
bsr SeekStart
cmp.l #-1,d0
beq WriteDP_ERR1
move.l Destination,d1
lea.l DefPrefs,a0
move.l a0,d2
move.l #DefPrefsSize,d3
lib Dos,Write
cmp.l d3,d0
bne WriteDP_ERR1
move.l #-1,d0
rts
WriteDP_ERR1: clr.l d0
rts
;CopyMapBuffer reads d0 bytes into MapBuffer and writes them into
;destination at current point
;
;Input d0 = Length
CopyMapBuffer: push d0
move.l Source1,d1
lea.l MapBuffer,a0
move.l a0,d2
pull d3
lib Dos,Read
cmp.l d3,d0
bne CopyMB_ERR1
move.l Destination,d1
lib Dos,Write
cmp.l d3,d0
bne CopyMB_ERR1
move.l #-1,d0
rts
CopyMB_ERR1: clr.l d0
rts
;CopyBytes copies asked amount from given file to destination at current
;positions. Max. length should be under 65536 bytes.
;
;Inputs d1 = Source file
; d3 = Length
;
CopyBytes: lea.l CopyBuffer1,a0
move.l a0,d2
lib Dos,Read
cmp.l d3,d0
bne CopyBytes_ERR1
move.l Destination,d1
lib Dos,Write
cmp.l d3,d0
bne CopyBytes_ERR1
move.l #-1,d0
rts
CopyBytes_ERR1: clr.l d0
rts
;CopyGL02Bytes copies GADLENG2VS02 bytes from Source to Destination
;
CopyGL02Bytes: move.l Source1,d1 ;Read GADLENGTHVS02 bytes
lea.l CopyBuffer1,a0
move.l a0,d2
move.l #GADLENGTHVS02,d3
lib Dos,Read
cmp.l #GADLENGTHVS02,d0
bne CopyGL02_ERR1
move.l Destination,d1 ;Write GADLENGTHVS02 bytes
lib Dos,Write
cmp.l #GADLENGTHVS02,d0
bne CopyGL02_ERR1
move.l #-1,d0
rts
CopyGL02_ERR1: clr.l d0
rts
;WriteNulls writes NULLs to Destination
;
;Inputs d3 = Amount of NULLs to write
WriteNulls: move.l Destination,d1
lea.l NullBuffer,a0
move.l a0,d2
lib Dos,Write
cmp.l d3,d0
bne WriteNull_ERR1
move.l #-1,d0
rts
WriteNull_ERR1: clr.l d0
rts
CloseFiles: move.l Source1,d1
beq CloseFiles2
lib Dos,Close
CloseFiles2: move.l Source2,d1
beq CloseFiles3
lib Dos,Close
CloseFiles3: move.l Destination,d1
beq CloseFiles4
lib Dos,Close
CloseFiles4: rts
;Compares two strings upto length of first string.
;
;Input a0 = String 1
; a1 = String 2
;
;Result d0 = 0 if not same
;
;BUGS
;
;String 1 has to have NULL at end!
;
CmpStrings: tst.b (a0)
beq CmpStrings2
cmp.b (a0)+,(a1)+
beq CmpStrings
clr.l d0
rts
CmpStrings2: move.l #-1,d0
rts
;Get length of text in given address
;
;Input a0 = Address of null terminated text string
;
;Result d0 = Length
GetLength: push a0
clr.l d0
cmp.l #$00,a0 ;fixes enforcer hit
beq GetLength_OUT
GetLength2: add.l #1,d0
tst.b (a0)+
bne GetLength2
sub.l #1,d0 ;don't include NULL
GetLength_OUT: pull a0
rts
ShutDown: move.l RDArgs1,d1
beq ShutDown9000
lib Dos,FreeArgs
ShutDown9000: bsr CloseFiles
ShutDown1000: closlib Dos
move.l RetCode,d0
rts
NoDos: move.l #RETURN_FAIL,d0
rts
NoRDArgs: lib Dos,IoErr
move.l d0,d1
NoRDArgs2: clr.l d2
lib Dos,PrintFault
move.l #RETURN_FAIL,RetCode
bra ShutDown
Printer: printa a0
rts
;Library stuff
libnames
;Reservations
_stdin: dc.l 0
_stdout: dc.l 0
RDArgs1: dc.l 0
Source1: dc.l 0
Source2: dc.l 0
Destination: dc.l 0
RetCode: dc.l RETURN_OK
;Options
CLArray1:
SourceFile1: dc.l 0
SourceFile2: dc.l 0
DestFile: dc.l 0
;Strings, errors etc.
FExistsText1: dc.b 13,10,"File already exists! Replace? (y/N) ",0
UnknownText1: dc.b "Unknown file type!",13,10,13,10
dc.b "File header was:",13,10,0
NewestText1: dc.b 13,10,"This is the newest version of the datafile ",13,10
dc.b "for VoiceShell that this program recognizes.",13,10,13,10
dc.b "ERROR: Can't convert to anything!",13,10,0
ErrorText1: dc.b "Error!",13,10,0
;Strings, others
CLTemplate1: dc.b "FROM/A,PREFS,TO/A/K",0
VSConvVersion: dc.b "$VER: VoiceShell_Conversion_Utility "
PROGVERSION
dc.b " (c) Copyright Tomi Blinnikka 1995",0
FromFileText1: dc.b 13,10,"Data file : ",0
FromFileText2: dc.b "Prefs file : ",0
DestText1: dc.b "Destination : ",0
ConvText1: dc.b "Converting VoiceShell: ",0
ConvText2: dc.b "Converting VCLI: ",0
ConvText3: dc.b "(VS02) 1.07 - 1.11 to 1.25 (VS05).",13,10,0
ConvText4: dc.b "(VS03) 1.12 - 1.18 to 1.25 (VS05).",13,10,0
ConvText5: dc.b "(VS04) 1.19 - 1.24 to 1.25 (VS05).",13,10,0
ConvText9: dc.b "VCLI 7.0 to VoiceShell 1.25 (VS05).",13,10,0
IncVerText1: dc.b "Incorrect preferences file version, using defaults.",13,10,0
YesText1: dc.b "Yes",13,10,0
NoText1: dc.b "No",13,10,0
CRLFText1: dc.b 13,10,0
;File headers
VSVersion02: dc.b "VS02",0 ;For prefs only!
VSVersion03: dc.b "VS03",0 ;For prefs only!
VSVersion04: dc.b "VS04",0 ;For prefs only!
VSVersion05: dc.b "VS05",0 ;For prefs only!
VCLI70ID: dc.b "VCLI7.0 DATA",0
ds.w 0
DEFPREFS_START:
DefPrefs: dc.b "VS05"
dc.b 0
dc.b SAMP_GENERIC
dc.b RES_HI
dc.b TIMER_B
dc.b 0
dc.b CHANNEL_LEFT
dc.b INPUT_LINE
dc.b 0
dc.l 120
dc.w DefAccVal
dc.w 0
dc.w 0
dc.l 0
dc.l 0
dc.l 0
dc.w 200
dc.w 31
;Map buffer comes here
;Command list after that
;Error commands after that
DEFPREFS_END: dc.l 0,0
DefPrefsSize: EQU (DEFPREFS_END-DEFPREFS_START)
;Other stuff, part II
Section VS,BSS
DATA_START:
MapBuffer: ds.b (VocabSIZE*304) ;60 words
CmdList: ds.b (VocabSIZE*GADLENGTH)
ErrCmdList: ds.b (9*GADLENG2)
DATA_END: ds.l 1
DataSize: EQU (DATA_END-DATA_START)
NullBuffer: ds.b NullBufSize1
CopyBuffer1: ds.b NullBufSize1
end